/************************************************************************
 * Este archivo, representa todo lo relacionado a la interfaz para la 
 * edicion de la informacion referente a un usuario administrador.
 * 
 * @system: veco-system
 * @description: Sistema de control vehicular
 * @version: 1.0
 * @Copyright © 2013 
 * 
 * @authores:
 * 
 *      > Alberione, Fernando    <falberione_037@gmail.com>
 * 
 *      > Boretto, Martin        <martinboretto@gmail.com>
 * 
 *      > Lenarduzzi, Federico   <fedeatenas@gmail.com>
 * 
 *      > Ocampo, Emanuel        <eocampo86@gmail.com>
 *
 *************************************************************************/

package Interfaces;

import SistemaCocheras.manejadorUsuarioAdmin;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.JOptionPane;


public class modificarAdministrador extends javax.swing.JFrame {

    private Connection conexion = null;
    private String campoDni = "";
    private String campoDniOriginal = "";
    private String campoNombre = "";
    private String campoApellido = "";
    private int campoEdad = 0;
    private String campoDireccion = "";
    private String campoTelefono = "";
    private String campoContrasenia = "";           // Contraseña
    private String campoContraseniaC = "";          // Confirmacion de la Contraseña


    // ---------------------------------------------------------
    // ------- Seccion de constructores de la clase
    // --------------------------------------------------------- 
    
    /**
    * Constructor vacio
    */
    public modificarAdministrador() {
        initComponents();
        centrarJFrame();
    }

   /**
   * Metodo encargado de crear el frame "Modificar Administrador"
   * @param con Representa la conexion con la base de datos
   * @param dni Representa el dni del administrador a modificar
   * @throws SQLException
   */
    public modificarAdministrador (Connection con, String dni){
        initComponents();
        centrarJFrame();
        this.conexion = con;
        manejadorUsuarioAdmin mua = new manejadorUsuarioAdmin(this.conexion);
        try {
            ResultSet res = mua.buscarAdministradorPorDni(dni);
            if (res.next()) {
                this.campoDniOriginal = dni;                                             // Se salva el dni original
                campoTextoDNIUsuario.setText(res.getString("dniusuario"));          // Rellena el campo de texto "DNI" con el valor anterior
                campoTextoNombreUsuario.setText(res.getString("nombre"));           // Rellena el campo de texto "Nombre" con el valor anterior
                campoTextoApellidoUsuario.setText(res.getString("apellido"));       // Rellena el campo de texto "Apellido "con el valor anterior
                campoTextoDireccionUsuario.setText(res.getString("direccion"));     // Rellena el campo de texto "Direccion" con el valor anterior
                campoTextoEdadUsuario.setText(res.getString("edad"));               // Rellena el campo de texto "Edad" con el valor anterior
                campoTextoTelefonoUsuario.setText(res.getString("telefono"));       // Rellena el campo de texto "Telefono" con el valor anterior
                campoTextoContraseniaUsuario.setText(res.getString("pass"));        // Rellena el campo de texto "Contraseña" con el valor anterior
                campoTextoContraseniaUsuarioC.setText(res.getString("pass"));       // Rellena el campo de texto "Confirmar Contraseña" con el valor anterior
            }
        } catch (SQLException ex) {
            JOptionPane.showMessageDialog(null,"Ha ocurrido un error interno:"+ ex, "Sistema de Cocheras B&B",JOptionPane.ERROR_MESSAGE);
        }
    }// Fin modificarAdministrador

    
    /** Este metodo es llamado desde el constructor para 
     * inicializar el form.
     * CUIDADO: NO modifique este codigo. El contenido de este metodo
     * es siempre regenerado por el editor de form.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        campoTextoContraseniaUsuario = new javax.swing.JTextField();
        lableDNIUsuario = new javax.swing.JLabel();
        labelCContraseniaUsuario = new javax.swing.JLabel();
        campoTextoDNIUsuario = new javax.swing.JTextField();
        campoTextoTelefonoUsuario = new javax.swing.JTextField();
        labelNombreUsuario = new javax.swing.JLabel();
        labelContraseniaUsuario = new javax.swing.JLabel();
        campoTextoNombreUsuario = new javax.swing.JTextField();
        botonCancelar = new javax.swing.JButton();
        labelApellidoUsuario = new javax.swing.JLabel();
        campoTextoApellidoUsuario = new javax.swing.JTextField();
        campoTextoContraseniaUsuarioC = new javax.swing.JTextField();
        labelEdadUsuario = new javax.swing.JLabel();
        botonAceptar = new javax.swing.JButton();
        campoTextoEdadUsuario = new javax.swing.JTextField();
        labelDireccionUsuario = new javax.swing.JLabel();
        labelTelefonoUsuario = new javax.swing.JLabel();
        campoTextoDireccionUsuario = new javax.swing.JTextField();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle("B&B - Modificar administrador");

        lableDNIUsuario.setText("DNI :");

        labelCContraseniaUsuario.setText("Confirmar Contraseña :");

        labelNombreUsuario.setText("Nombre :");

        labelContraseniaUsuario.setText("Contraseña :");

        botonCancelar.setText("Cancelar");
        botonCancelar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonCancelarActionPerformed(evt);
            }
        });

        labelApellidoUsuario.setText("Apellido :");

        labelEdadUsuario.setText("Edad :");

        botonAceptar.setText("Aceptar");
        botonAceptar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botonAceptarActionPerformed(evt);
            }
        });

        labelDireccionUsuario.setText("Direccion :");

        labelTelefonoUsuario.setText("Teléfono :");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(19, 19, 19)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(botonAceptar, javax.swing.GroupLayout.PREFERRED_SIZE, 94, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(botonCancelar, javax.swing.GroupLayout.PREFERRED_SIZE, 97, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(labelEdadUsuario)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(campoTextoEdadUsuario, javax.swing.GroupLayout.PREFERRED_SIZE, 204, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(lableDNIUsuario)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(campoTextoDNIUsuario, javax.swing.GroupLayout.PREFERRED_SIZE, 204, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(labelDireccionUsuario)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(campoTextoDireccionUsuario, javax.swing.GroupLayout.PREFERRED_SIZE, 204, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(labelCContraseniaUsuario)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(campoTextoContraseniaUsuarioC, javax.swing.GroupLayout.PREFERRED_SIZE, 204, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(labelTelefonoUsuario)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(campoTextoTelefonoUsuario, javax.swing.GroupLayout.PREFERRED_SIZE, 204, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(labelNombreUsuario)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(campoTextoNombreUsuario, javax.swing.GroupLayout.PREFERRED_SIZE, 204, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(labelContraseniaUsuario)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(campoTextoContraseniaUsuario, javax.swing.GroupLayout.PREFERRED_SIZE, 204, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(labelApellidoUsuario)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(campoTextoApellidoUsuario, javax.swing.GroupLayout.PREFERRED_SIZE, 204, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap(40, Short.MAX_VALUE))
        );

        layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {botonAceptar, botonCancelar});

        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(25, 25, 25)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(campoTextoDNIUsuario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(lableDNIUsuario))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(campoTextoNombreUsuario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(labelNombreUsuario))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(campoTextoApellidoUsuario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(labelApellidoUsuario))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(campoTextoEdadUsuario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(labelEdadUsuario))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(campoTextoDireccionUsuario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(labelDireccionUsuario))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(campoTextoTelefonoUsuario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(labelTelefonoUsuario))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(campoTextoContraseniaUsuario, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(labelContraseniaUsuario))
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(campoTextoContraseniaUsuarioC, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(labelCContraseniaUsuario))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 45, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(botonAceptar, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(botonCancelar, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(19, 19, 19))
        );

        layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {botonAceptar, botonCancelar});

        pack();
    }// </editor-fold>//GEN-END:initComponents


    // ---------------------------------------------------------
    // ------- Seccion de metodos privados
    // ---------------------------------------------------------  
    
    /**
     * Metodo encargado de cancelar la modificacion del administrador
     * @param evt Evento que representa el click en el boton Cancelar
     */
    private void botonCancelarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonCancelarActionPerformed
        this.dispose();
}//GEN-LAST:event_botonCancelarActionPerformed

    /**
     * Metodo encargado de asentar la modificacion del administrador en la BD
     * @param evt Evento que representa el click en el boton Aceptar
     */
    private void botonAceptarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_botonAceptarActionPerformed
        manejadorUsuarioAdmin nuevoUsuario = new manejadorUsuarioAdmin(this.conexion);
        this.campoDni = campoTextoDNIUsuario.getText();                          // Obtengo la informacion que se carga en el campo de texto "DNI"
        this.campoNombre = campoTextoNombreUsuario.getText();                    // Obtengo la informacion que se carga en el campo de texto "NOMBRE"
        this.campoApellido = campoTextoApellidoUsuario.getText();                // Obtengo la informacion que se carga en el campo de texto "APELLIDO"
        if(campoTextoEdadUsuario.getText().compareTo("") != 0){
            this.campoEdad = Integer.parseInt(campoTextoEdadUsuario.getText());  // Obtengo la informacion que se carga en el campo de texto "EDAD"
        }
        this.campoDireccion = campoTextoDireccionUsuario.getText();              // Obtengo la informacion que se carga en el campo de texto "DIRECCION"
        this.campoTelefono = campoTextoTelefonoUsuario.getText();                // Obtengo la informacion que se carga en el campo de texto "TELEFONO"
        this.campoContrasenia = campoTextoContraseniaUsuario.getText();
        this.campoContraseniaC = campoTextoContraseniaUsuarioC.getText();

        if(this.campoContrasenia.compareTo(this.campoContraseniaC) == 0){             // Control de contraseña y su confirmacion
            try {
                // Control de contraseña y su confirmacion
                if (controlarCamposyDNI(this.campoDni, nuevoUsuario, this.campoNombre, this.campoApellido, this.campoDireccion, this.campoEdad, this.campoTelefono, this.campoContrasenia)) {
                    // Control de campos NO vacios y DNI existente
                    try {
                        nuevoUsuario.actualizarUsuario(this.campoDniOriginal, this.campoDni, this.campoNombre, this.campoApellido, this.campoEdad, this.campoDireccion, this.campoTelefono, this.campoContrasenia);
                        JOptionPane.showMessageDialog(null, "Los datos del usuario '" + this.campoNombre + " " + this.campoApellido + "' han sido actualizados y cargados satisfactoriamente en el sistema. ", "Sistema de Cocheras B&B", JOptionPane.INFORMATION_MESSAGE);
                        this.dispose();
                    } 
                    catch (IOException ex) {
                        JOptionPane.showMessageDialog(null, "Ha ocurrido un error interno:" + ex, "Sistema de Cocheras B&B", JOptionPane.ERROR_MESSAGE);
                    }
                }
                else {
                    lanzarError();
                }
            }
            catch (SQLException ex) {
                JOptionPane.showMessageDialog(null, "Ha ocurrido un error interno:" + ex, "Sistema de Cocheras B&B", JOptionPane.ERROR_MESSAGE);
            }
        }
        else{
            JOptionPane.showMessageDialog(null,"La contraseña ingresada no coincide con la confirmacion de la misma", "Sistema de Cocheras B&B",JOptionPane.ERROR_MESSAGE);
        }
        
    }//GEN-LAST:event_botonAceptarActionPerformed

    /**
     * Metodo encargado de advertir un error en la modificacion de la informacion
     */
     private void lanzarError(){
        JOptionPane.showMessageDialog(null, "Se deben rellenar correctamente todos los campos.", "Sistema de Cocheras B&B",JOptionPane.ERROR_MESSAGE);
    }

    /**
     * Metodo encargado de validar la informacion referente a un administrador
     * @param campo_DNI Nuevo DNI del administrador
     * @param mu Instancia del manejador para usuarios administradores 
     * @param campo_Nombre Nuevo nombre del administrador 
     * @param campo_Apellido Nuevo apellido del administrador
     * @param campo_Direccion Nueva direccion del administrador
     * @param campo_Edad Nueva edad del administrador
     * @param campo_Telefono Nuevo telefono del administrador
     * @param campo_Contrasenia Nueva contraseña del administrador
     * @throws SQLException 
     */
    private boolean controlarCamposyDNI (String campo_DNI, manejadorUsuarioAdmin mu, String campo_Nombre, String campo_Apellido, String campo_Direccion,
                                          int campo_Edad, String campo_Telefono, String campo_Contrasenia ) throws SQLException{
        boolean condicion = false;
        if((noEsVacio(campo_DNI)) && ((mu.buscarAdministradorPorDni(campo_DNI)).next()) && (noEsVacio(campo_Nombre))
                && (noEsVacio(campo_Apellido)) && (campo_Edad >= 16) && (noEsVacio(campo_Direccion)) && (noEsVacio(campo_Telefono))
                && (noEsVacio(campo_Contrasenia))){
            condicion = true;
        }
        return condicion;
     }// Fin controlarCamposyDNI


     /**
      * Metodo encargado de verificar si un campo es vacio o no
      * @param campo Cadena a controlar
      */
     private boolean noEsVacio (String campo){
        return (campo.compareTo("") != 0);          // Devuelve true si el campo esta escrito
     }

    /**
     * Metodo encargado de ubicar el frame en el centro de la pantalla
     */
    private void centrarJFrame(){
        Dimension pantalla = Toolkit.getDefaultToolkit().getScreenSize();
        Dimension frame =this.getSize();
        this.setLocation((pantalla.width-frame.width)/2, (pantalla.height-frame.height)/2);
    }

    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new modificarUsuario().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton botonAceptar;
    private javax.swing.JButton botonCancelar;
    private javax.swing.JTextField campoTextoApellidoUsuario;
    private javax.swing.JTextField campoTextoContraseniaUsuario;
    private javax.swing.JTextField campoTextoContraseniaUsuarioC;
    private javax.swing.JTextField campoTextoDNIUsuario;
    private javax.swing.JTextField campoTextoDireccionUsuario;
    private javax.swing.JTextField campoTextoEdadUsuario;
    private javax.swing.JTextField campoTextoNombreUsuario;
    private javax.swing.JTextField campoTextoTelefonoUsuario;
    private javax.swing.JLabel labelApellidoUsuario;
    private javax.swing.JLabel labelCContraseniaUsuario;
    private javax.swing.JLabel labelContraseniaUsuario;
    private javax.swing.JLabel labelDireccionUsuario;
    private javax.swing.JLabel labelEdadUsuario;
    private javax.swing.JLabel labelNombreUsuario;
    private javax.swing.JLabel labelTelefonoUsuario;
    private javax.swing.JLabel lableDNIUsuario;
    // End of variables declaration//GEN-END:variables

}
